Semiconductor memory is widely used in various electronic devices such as cellular telephones, digital cameras, personal digital assistants, medical electronics, mobile computing devices, servers, solid state drives, non-mobile computing devices and other devices. Semiconductor memory may comprise non-volatile memory or volatile memory. A non-volatile memory allows information to be stored and retained even when the non-volatile memory is not connected to a source of power (e.g., a battery). Examples of non-volatile memory include flash memory (e.g., NAND-type and NOR-type flash memory).
Memory systems can be used to store data provided by a host device, client, user or other entity. The data can then be read back and provided in response to read requests. It is important that data stored in a memory system is not lost. Performance of the memory system, such a speed of operation, is also important to hosts, clients, users, etc.
Semiconductor memory, like other electronics, are subject to manufacturing variations. Many defects can be found by tests performed during the manufacturing phase. However, some defects are latent such that they will not be identified by tests performed during the manufacturing phase because these latent defects do not initially change behavior of the device. Over time the defects may manifest themselves causing erroneous device behavior. Examples of such defects includes shorts between signal lines and broken components. These defects can lead to failure of a programming process. To protect against latent defects during the programming process, some memory devices include means for determining whether a programming process failed. When it is discovered that a programming process failed, some memory systems will pause the programming process, reprogram the data somewhere else and move nearby data (e.g., data in the same block) to a new location. Subsequently, the original programming process is continued. While this method does help with failures when programming, the pausing of the programming process slows down the operation of the memory system from the point of view of a host, client or user.